﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Odbc;
using System.Configuration;

public class ProdutoDAL
{
    public int idnextval { get; set; }
    public int idProduto { get; set; }

    public string NomeProduto { get; set; }
    public string CodigoProduto { get; set; }
    public string Descricao { get; set; }
    public string DensidadeCalorica { get; set; }
    public string DistribuicaoCalorica { get; set; }
    public string FonteProteina { get; set; }
    public string FonteCarboidrato { get; set; }
    public string FonteFibra { get; set; }
    public string FonteLipideo { get; set; }
    public string PerfilLipidico { get; set; }
    public string Proteina { get; set; }
    public string Carboidrato { get; set; }
    public string Lipideo { get; set; }
    public string ProporcaoCaloria { get; set; }
    public string NutriCond { get; set; }
    public string OsmolaridadeAgua { get; set; }
    public string Osmolaridade { get; set; }
    public string Apresentacao { get; set; }
    public string Sabor { get; set; }
    public string VolumeMedio { get; set; }
    public string estiloCSS { get; set; }

    public string Ativo { get; set; }
    public int idUpdate { get; set; }
    public string DataUpdate { get; set; }
    public int idCadastro { get; set; }
    public string DataCadastro { get; set; }
    public string msgRetorno { get; set; }
    public int codRetorno { get; set; }

    public string comandoDelete = "DELETE FROM tbProduto WHERE idProduto = ? ";
    public string comandoSelect = "SELECT * FROM tbProduto WHERE idProduto = ? ";
    public string comandoInsert;
    public string comandoUpdate;


    public ProdutoDAL()
    {
        this.idProduto = next_val();
        this.NomeProduto = "";
        this.CodigoProduto = "";
        this.Descricao = "";
        this.DensidadeCalorica = "";
        this.DistribuicaoCalorica = "";
        this.FonteProteina = "";
        this.FonteCarboidrato = "";
        this.FonteFibra = "";
        this.FonteLipideo = "";
        this.PerfilLipidico = "";
        this.Proteina = "";
        this.Carboidrato = "";
        this.Lipideo = "";
        this.ProporcaoCaloria = "";
        this.NutriCond = "";
        this.OsmolaridadeAgua = "";
        this.Osmolaridade = "";
        this.Apresentacao = "";
        this.Sabor = "";
        this.VolumeMedio = "";
        this.estiloCSS = "";

        this.Ativo = "S";
        this.idUpdate = 0;
        this.DataUpdate = DateTime.Now.ToString("dd / MM / yyyy h:mm:ss");
        this.idCadastro = 0;
        this.DataCadastro = DateTime.Now.ToString("dd / MM / yyyy h:mm:ss");
    }
    public static List<ProdutoDAL> SelecionarTodos(string param)
    {
        try
        {
            string comandSelectTodos = "SELECT * FROM tbProduto ";

            if (param != "")
            {
                //comandSelectTodos = "SELECT * FROM tbProduto WHERE Login LIKE '%" + param.ToString() + "%' ";
                comandSelectTodos = "SELECT * FROM tbProduto WHERE NomeProduto = ?  ";
            }

            using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
            using (OdbcCommand cmd = new OdbcCommand(comandSelectTodos, con))
            {
                List<ProdutoDAL> lProduto = new List<ProdutoDAL>();

                cmd.Parameters.Add("@Produto", OdbcType.VarChar, 255).Value = param;
                con.Open();
                OdbcDataReader rs = cmd.ExecuteReader();
                while (rs.Read())
                {

                    ProdutoDAL oObj = new ProdutoDAL();
                    oObj.idProduto = Convert.ToInt32(rs["idProduto"]);

                    oObj.NomeProduto = rs["NomeProduto"].ToString();
                    oObj.CodigoProduto = rs["CodigoProduto"].ToString();
                    oObj.Descricao = rs["Descricao"].ToString();
                    oObj.DensidadeCalorica = rs["DensidadeCalorica"].ToString();
                    oObj.DistribuicaoCalorica = rs["DistribuicaoCalorica"].ToString();
                    oObj.FonteProteina = rs["FonteProteina"].ToString();
                    oObj.FonteCarboidrato = rs["FonteCarboidrato"].ToString();
                    oObj.FonteFibra = rs["FonteFibra"].ToString();
                    oObj.FonteLipideo = rs["FonteLipideo"].ToString();
                    oObj.PerfilLipidico = rs["PerfilLipidico"].ToString();
                    oObj.Proteina = rs["Proteina"].ToString();
                    oObj.Carboidrato = rs["Carboidrato"].ToString();
                    oObj.Lipideo = rs["Lipideo"].ToString();
                    oObj.ProporcaoCaloria = rs["ProporcaoCaloria"].ToString();
                    oObj.NutriCond = rs["NutriCond"].ToString();
                    oObj.OsmolaridadeAgua = rs["OsmolaridadeAgua"].ToString();
                    oObj.Osmolaridade = rs["Osmolaridade"].ToString();
                    oObj.Apresentacao = rs["Apresentacao"].ToString();
                    oObj.Sabor = rs["Sabor"].ToString();
                    oObj.VolumeMedio = rs["VolumeMedio"].ToString();
                    oObj.estiloCSS = rs["estiloCSS"].ToString();
                    
                    oObj.Ativo = rs["Ativo"].ToString();
                    oObj.idUpdate = Convert.ToInt32(rs["idUpdate"]);
                    oObj.DataUpdate = rs["DataUpdate"].ToString();
                    oObj.idCadastro = Convert.ToInt32(rs["idCadastro"]);
                    oObj.DataCadastro = rs["DataCadastro"].ToString();
                    oObj.msgRetorno = "Registo encontrado";
                    oObj.codRetorno = 0;
                    lProduto.Add(oObj);
                }
                rs.Close();
                con.Close();
                return lProduto;
            }
        }
        catch (Exception ex)
        {

            List<ProdutoDAL> lProduto = new List<ProdutoDAL>();
            ProdutoDAL oObj = new ProdutoDAL();
            oObj.msgRetorno = "Registro nao encontrado";
            oObj.codRetorno = 1;
            lProduto.Add(oObj);
            return lProduto;

        }
    } // SelecionarTodos
    public int next_val()
    {
        try
        {
            using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
            using (OdbcCommand cmd = new OdbcCommand("SELECT TOP 1 idProduto FROM tbProduto ORDER BY idProduto DESC ", con))
            {
                idnextval = 1;
                con.Open();
                OdbcDataReader rs = cmd.ExecuteReader();
                while (rs.Read())
                {
                    idnextval = Convert.ToInt32(rs["idProduto"]) + 1;
                }
            }
            return idnextval;

        }
        catch (Exception ex)
        {
            return 0;
        }

    }
    public void SelecionarPorID(int id)
    {
        try
        {
            using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
            using (OdbcCommand cmd = new OdbcCommand(comandoSelect, con))
            {
                cmd.Parameters.Add("@idProduto", OdbcType.Int).Value = id;
                con.Open();
                OdbcDataReader rs = cmd.ExecuteReader();
                while (rs.Read())
                {
                    this.idProduto = Convert.ToInt32(rs["idProduto"]);

                    this.NomeProduto = rs["NomeProduto"].ToString();
                    this.CodigoProduto = rs["CodigoProduto"].ToString();
                    this.Descricao = rs["Descricao"].ToString();
                    this.DensidadeCalorica = rs["DensidadeCalorica"].ToString();
                    this.DistribuicaoCalorica = rs["DistribuicaoCalorica"].ToString();
                    this.FonteProteina = rs["FonteProteina"].ToString();
                    this.FonteCarboidrato = rs["FonteCarboidrato"].ToString();
                    this.FonteFibra = rs["FonteFibra"].ToString();
                    this.FonteLipideo = rs["FonteLipideo"].ToString();
                    this.PerfilLipidico = rs["PerfilLipidico"].ToString();
                    this.Proteina = rs["Proteina"].ToString();
                    this.Carboidrato = rs["Carboidrato"].ToString();
                    this.Lipideo = rs["Lipideo"].ToString();
                    this.ProporcaoCaloria = rs["ProporcaoCaloria"].ToString();
                    this.NutriCond = rs["NutriCond"].ToString();
                    this.OsmolaridadeAgua = rs["OsmolaridadeAgua"].ToString();
                    this.Osmolaridade = rs["Osmolaridade"].ToString();
                    this.Apresentacao = rs["Apresentacao"].ToString();
                    this.Sabor = rs["Sabor"].ToString();
                    this.VolumeMedio = rs["VolumeMedio"].ToString();
                    this.estiloCSS = rs["estiloCSS"].ToString();
                    
                    this.Ativo = rs["Ativo"].ToString();
                    this.idUpdate = Convert.ToInt32(rs["idUpdate"]);
                    this.DataUpdate = rs["DataUpdate"].ToString();
                    this.idCadastro = Convert.ToInt32(rs["idCadastro"]);
                    this.DataCadastro = rs["DataCadastro"].ToString();

                    this.msgRetorno = "Registro encontrado";
                    this.codRetorno = 0;
                }
                rs.Close();
                con.Close();
            }

        }
        catch (Exception ex)
        {
            this.msgRetorno = "Registro não encontrado";
            this.codRetorno = 1;
        }
    } // SelecionarPorID
    public void Insert()
    {
    
        comandoInsert = "INSERT INTO tbProduto (" ;
        comandoInsert = comandoInsert + " idProduto ,NomeProduto,CodigoProduto,Descricao,DensidadeCalorica,DistribuicaoCalorica,FonteProteina,FonteCarboidrato,FonteFibra,FonteLipideo,PerfilLipidico";
        comandoInsert = comandoInsert + ",Proteina,Carboidrato,Lipideo,ProporcaoCaloria,NutriCond,OsmolaridadeAgua,Osmolaridade,Apresentacao,Sabor,VolumeMedio,Ativo, idUpdate,idCadastro";
        comandoInsert = comandoInsert + ", estiloCSS ";
        comandoInsert = comandoInsert + ") VALUES (";
        comandoInsert = comandoInsert + " ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ";
        comandoInsert = comandoInsert + ",? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ";
        comandoInsert = comandoInsert + ", ? )";   

        using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        using (OdbcCommand cmd = new OdbcCommand(comandoInsert, con))
        {
            cmd.Parameters.Add("@idProduto", OdbcType.Int).Value = this.idProduto;
            cmd.Parameters.Add("@NomeProduto", OdbcType.VarChar, 255).Value = this.NomeProduto;
            cmd.Parameters.Add("@CodigoProduto", OdbcType.VarChar, 255).Value = this.CodigoProduto;
            cmd.Parameters.Add("@Descricao", OdbcType.VarChar, 255).Value = this.Descricao;
            cmd.Parameters.Add("@DensidadeCalorica", OdbcType.VarChar, 255).Value = this.DensidadeCalorica;
            cmd.Parameters.Add("@DistribuicaoCalorica", OdbcType.VarChar, 255).Value = this.DistribuicaoCalorica;
            cmd.Parameters.Add("@FonteProteina", OdbcType.VarChar, 255).Value = this.FonteProteina;
            cmd.Parameters.Add("@FonteCarboidrato", OdbcType.VarChar, 255).Value = this.FonteCarboidrato;
            cmd.Parameters.Add("@FonteFibra", OdbcType.VarChar, 255).Value = this.FonteFibra;
            cmd.Parameters.Add("@FonteLipideo", OdbcType.VarChar, 255).Value = this.FonteLipideo;
            cmd.Parameters.Add("@PerfilLipidico", OdbcType.VarChar, 255).Value = this.PerfilLipidico;
            cmd.Parameters.Add("@Proteina", OdbcType.VarChar, 255).Value = this.Proteina;
            cmd.Parameters.Add("@Carboidrato", OdbcType.VarChar, 255).Value = this.Carboidrato;
            cmd.Parameters.Add("@Lipideo", OdbcType.VarChar, 255).Value = this.Lipideo;
            cmd.Parameters.Add("@ProporcaoCaloria", OdbcType.VarChar, 255).Value = this.ProporcaoCaloria;
            cmd.Parameters.Add("@NutriCond", OdbcType.VarChar, 255).Value = this.NutriCond;
            cmd.Parameters.Add("@OsmolaridadeAgua", OdbcType.VarChar, 255).Value = this.OsmolaridadeAgua;
            cmd.Parameters.Add("@Osmolaridade", OdbcType.VarChar, 255).Value = this.Osmolaridade;
            cmd.Parameters.Add("@Apresentacao", OdbcType.VarChar, 255).Value = this.Apresentacao;
            cmd.Parameters.Add("@Sabor", OdbcType.VarChar, 255).Value = this.Sabor;
            cmd.Parameters.Add("@VolumeMedio", OdbcType.VarChar, 255).Value = this.VolumeMedio;

            cmd.Parameters.Add("@Ativo", OdbcType.VarChar, 255).Value = this.Ativo;
            cmd.Parameters.Add("@idUpdate", OdbcType.Int).Value = Convert.ToInt32(this.idUpdate);
            cmd.Parameters.Add("@idCadastro", OdbcType.Int).Value = Convert.ToInt32(this.idCadastro);
            cmd.Parameters.Add("@estiloCSS", OdbcType.VarChar, 255).Value = this.estiloCSS;

            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
           
            this.msgRetorno = "Registro inserido com sucesso";
            this.codRetorno = 0;
        }
    }
    public void Update(int id)
    {
        comandoUpdate = "UPDATE tbProduto SET ";
        comandoUpdate += " NomeProduto	= ? ,";
        comandoUpdate += " CodigoProduto	= ? ,";
        comandoUpdate += " Descricao	= ? ,";
        comandoUpdate += " DensidadeCalorica	= ? ,";
        comandoUpdate += " DistribuicaoCalorica	= ? ,";
        comandoUpdate += " FonteProteina	= ? ,";
        comandoUpdate += " FonteCarboidrato	= ? ,";
        comandoUpdate += " FonteFibra	= ? ,";
        comandoUpdate += " FonteLipideo	= ? ,";
        comandoUpdate += " PerfilLipidico	= ? ,";
        comandoUpdate += " Proteina	= ? ,";
        comandoUpdate += " Carboidrato	= ? ,";
        comandoUpdate += " Lipideo	= ? ,";
        comandoUpdate += " ProporcaoCaloria	= ? ,";
        comandoUpdate += " NutriCond	= ? ,";
        comandoUpdate += " OsmolaridadeAgua	= ? ,";
        comandoUpdate += " Osmolaridade	= ? ,";
        comandoUpdate += " Apresentacao	= ? ,";
        comandoUpdate += " Sabor	= ? ,";
        comandoUpdate += " VolumeMedio	= ? ,";
        comandoUpdate += " estiloCSS	= ? ,";
        comandoUpdate += " Ativo=?,idUpdate=? ,DataUpdate=? WHERE idProduto = ? ";

        using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        using (OdbcCommand cmd = new OdbcCommand(comandoUpdate, con))
        {
            cmd.Parameters.Add("@NomeProduto", OdbcType.VarChar, 255).Value = this.NomeProduto;
            cmd.Parameters.Add("@CodigoProduto", OdbcType.VarChar, 255).Value = this.CodigoProduto;
            cmd.Parameters.Add("@Descricao", OdbcType.VarChar, 255).Value = this.Descricao;
            cmd.Parameters.Add("@DensidadeCalorica", OdbcType.VarChar, 255).Value = this.DensidadeCalorica;
            cmd.Parameters.Add("@DistribuicaoCalorica", OdbcType.VarChar, 255).Value = this.DistribuicaoCalorica;
            cmd.Parameters.Add("@FonteProteina", OdbcType.VarChar, 255).Value = this.FonteProteina;
            cmd.Parameters.Add("@FonteCarboidrato", OdbcType.VarChar, 255).Value = this.FonteCarboidrato;
            cmd.Parameters.Add("@FonteFibra", OdbcType.VarChar, 255).Value = this.FonteFibra;
            cmd.Parameters.Add("@FonteLipideo", OdbcType.VarChar, 255).Value = this.FonteLipideo;
            cmd.Parameters.Add("@PerfilLipidico", OdbcType.VarChar, 255).Value = this.PerfilLipidico;
            cmd.Parameters.Add("@Proteina", OdbcType.VarChar, 255).Value = this.Proteina;
            cmd.Parameters.Add("@Carboidrato", OdbcType.VarChar, 255).Value = this.Carboidrato;
            cmd.Parameters.Add("@Lipideo", OdbcType.VarChar, 255).Value = this.Lipideo;
            cmd.Parameters.Add("@ProporcaoCaloria", OdbcType.VarChar, 255).Value = this.ProporcaoCaloria;
            cmd.Parameters.Add("@NutriCond", OdbcType.VarChar, 255).Value = this.NutriCond;
            cmd.Parameters.Add("@OsmolaridadeAgua", OdbcType.VarChar, 255).Value = this.OsmolaridadeAgua;
            cmd.Parameters.Add("@Osmolaridade", OdbcType.VarChar, 255).Value = this.Osmolaridade;
            cmd.Parameters.Add("@Apresentacao", OdbcType.VarChar, 255).Value = this.Apresentacao;
            cmd.Parameters.Add("@Sabor", OdbcType.VarChar, 255).Value = this.Sabor;
            cmd.Parameters.Add("@VolumeMedio", OdbcType.VarChar, 255).Value = this.VolumeMedio;
            cmd.Parameters.Add("@estiloCSS", OdbcType.VarChar, 255).Value = this.estiloCSS;
            cmd.Parameters.Add("@Ativo", OdbcType.VarChar, 255).Value = this.Ativo;
            cmd.Parameters.Add("@idUpdate", OdbcType.Int).Value = this.idUpdate;
            cmd.Parameters.Add("@DataUpdate", OdbcType.VarChar, 255).Value = this.DataUpdate; 
            cmd.Parameters.Add("@idProduto", OdbcType.Int).Value = id;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            this.msgRetorno = "Registro atualizado com sucesso";
            this.codRetorno = 0;
        }
    }

    public void Delete(int id)
    {
        using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        using (OdbcCommand cmd = new OdbcCommand(comandoDelete, con))
        {

            cmd.Parameters.Add("@idProduto", OdbcType.Int).Value = id;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }
    } //Delete


}